UiPathで定型作業を自動化する際、どうやっても使う事になるのがDataTable。
.NETで業務アプリケーションを作るプログラマーにとっては定番なのですが、
RPAの世界ではそうじゃない人の方が大多数と思います。
UiPath Academyの「レッスン9 - Excelとデータテーブル」でも学べるのですが、
早い段階から知っておいた方が良い知識なので、UiPathで必要な範囲に絞っておさらいしてみます。
#DataTable(データテーブル)とは何か
Excelシートと同じ、行と列の表形式データを入れる"入れ物"です。
Excelシートと違うのは、行番号は1でなく0から始まる事と、
列もA, B, C, ...ではなく列名(↓の例だと"ロボID"等)、もしくは行と同様に0, 1, 2, ...です。
UiPathでは大抵の場合、↓のような使い方になります。
・Read RangeアクティビティでExcelシートを読み込む
・Data ScrapingでWebサイトから表形式データを取り込む
と、UiPathがデータをDataTableに詰めて返してくれるので、後はFor Each Rowアクティビティで
データを1行ずつ処理して、最後にWrite RangeでデータをExcelに書き込む、という流れ。
#DataTableデータの持ち方
Excelシートを読み込む場合、UiPathから返されるDataTableのデータの持ち方は
Read Rangeアクティビティの"AddHeaders"のオン(デフォルト)/オフで変わってきます。
例えば↓のExcelシートでロボID "BP-302"が入っているのはA4セルですが、
読み込んだ結果のDataTableの中身とデータのアクセスの仕方は↓のように全然違います。
※dtRobotはDataTableの変数名ね。
AddHeadersオンの場合(Data Scrapingで取ってくる場合もコレ)
1行目がヘッダ列情報として使われ、データに入ってきません。
DataTableは行番号が0から始まるのと合わせると、Excelの行番号と2つズレる事になります。
データは列の名前でアクセスできます。わかりやすい。
AddHeadersオフの場合
1行目からデータとして入ってきますが、列名が無いためデータは列番号でアクセスする事になります。
※行番号のズレも注意ですが、セル指定の順番もExcelと逆な事に注意が必要です。
Excelは"A4"のように列→行の順、DataTableはdtRobot(2)("ロボID")のように行→列の順。
#For Each RowとDataRow
DataRowについても知っておきましょう。
↓の通り、DataRowとはDataTableのそれぞれの行を指します。
1DataRow = 1行なので、行番号はありません。
UiPathから返されたDataTableを上から1行ずつ処理する場合、For Each Rowアクティビティを使います。
Foreachの後に、勝手に"row"変数がセットされますが、これがDataTableから取り出したDataRowです。
row.Items(列名)で、指定した列名のデータを取り出す事ができます。
このワークフローを実行すると、Output窓に
デッカード
マクレーン
パワージョー
・・・
といったように、Excelから読み込んだ"ロボ名"列のデータがリストアップされます。
今回はここまで。
DataTableのもうちょっと踏み込んだ使い方、例えばソートとかフィルタとかは
UiPathでよく使う.NETコード集
で説明してますので、参考にして下さい。